package br.ufrj.dcc.so.trab2.manager;

import br.ufrj.dcc.so.trab2.Barbearia;
import br.ufrj.dcc.so.trab2.entity.Cliente;

public abstract class BarbeiroAbstrato extends Pessoa implements Runnable{
	
	protected Barbearia barbearia;

	public BarbeiroAbstrato(Barbearia barbearia){
		this.barbearia =  barbearia;
	}
	
	private boolean vivo = true;
	private int cicloVida = 100;
	
	
	/**
	 * Método que atende um cliente
	 */
	public void atendeCliente(){
		Cliente cliente  = escolheClienteFila();
		sleep(cliente.getTempoServico());		
	}

	/**
	 * Método que escolhe dentre as filas qual cliente será atendido!
	 * @return Cliente a ser atendido
	 */
	protected abstract Cliente escolheClienteFila();
	
	@Override
	public void run() {
		while(vivo)
		{
			/*
			 * Ele esta vivo retirando os clientes das fila e atendo eles de acordo com 
			 * as prioridades definidas
			 */

			//TODO - produtor consumidor
			//TODO - Colocar o sincronismo!
			atendeCliente();

			//morte prematura
			if(--cicloVida<0)vivo=false;
		}		

	}
}
